package com.sxj.corejava.code08_常用类.内部类;

/**
 * @author 石小俊
 * @date 2025年02月19日
 */
public class Test04_匿名内部类 {

    public static void main(String[] args) {
        SomeInterface someInterface = new SomeClass();
        someInterface.doSome();
        someInterface.doOther();

        System.out.println("****************************");
        SomeInterface someInterface2 = new SomeInterface() {
            @Override
            public void doSome() {
                System.out.println("这是匿名内部类实现的doSome方法");
            }

            @Override
            public void doOther() {
                System.out.println("这是匿名内部类实现的doOther方法");
            }
        };
        someInterface2.doSome();
        someInterface2.doOther();

        System.out.println("****************************");
        OtherClass otherClass = new SonClass();
        otherClass.doSome();
        otherClass.doOther();

        System.out.println("****************************");

        OtherClass oc = new OtherClass() {
            @Override
            public void doSome() {
                System.out.println("这是匿名内部类实现的抽象方法doSome");
            }

            @Override
            public void doOther() {
                System.out.println("这是匿名内部类实现的抽象方法doOther");
            }
        };
        oc.doSome();
        oc.doOther();
    }

}

interface SomeInterface {
    void doSome();

    void doOther();
}

class SomeClass implements SomeInterface {

    @Override
    public void doSome() {
        System.out.println("SomeClass.doSome");
    }

    @Override
    public void doOther() {
        System.out.println("SomeClass.doOther");
    }
}

abstract class OtherClass {
    public abstract void doSome();

    public abstract void doOther();
}

class SonClass extends OtherClass {

    @Override
    public void doSome() {
        System.out.println("SonClass.doSome");
    }

    @Override
    public void doOther() {
        System.out.println("SonClass.doOther");
    }
}